function [basis] = C_shape_basis(Dati)
%% function [basis] = C_shape_basis(Dati)
%==========================================================================
% Compute the shape functions for triangular and quadrilateral elements
%==========================================================================
%    called in C_matrix2D.m
%
%    INPUT:
%          Dati        : (struct)  see C_dati.m
%
%    OUTPUT:
%          basis       : (struct) .num  (int) number of basis functions
%                                 .nedge (int) number of edges
%                                 .fbases (string) basis functions
%                                 .Gbases_1 (string) df/dx
%                                 .Gbases_2 (string) df/dy
%



% fprintf('============================================================\n')
% fprintf('Compute %s finite elements...\n',Dati.fem);
% fprintf('============================================================\n')


switch  Dati.MeshType
    
    case{'TS', 'TU'}
        
        nln=3;
        basis=struct('num',nln,...
            'n_edge',3,...
            'fbases',{'-1.*csi  - 1.*eta + 1',...
            ' 1.*csi  + 0.*eta + 0',...
            ' 0.*csi  + 1.*eta + 0'},...
            'Gbases_1',{'-1     + 0.*eta + 0',...
            ' 1     + 0.*eta + 0',...
            ' 0     + 0.*eta + 0'},...
            'Gbases_2',{'0 .*csi - 1     + 0',...
            '0 .*csi + 0     + 0',...
            '0 .*csi + 1     + 0'});
        
        
        
    case{'QS', 'QU'}
        
        nln = 4;
        
        basis=struct('num',nln,...
            'n_edge',4,...
            'fbases',{'0.25.*(1+csi).*(1-eta)',...
            '0.25.*(1+csi).*(1+eta)',...
            '0.25.*(1-csi).*(1+eta)',...
            '0.25.*(1-csi).*(1-eta)'},...
            'Gbases_1',{'+0.25.*(1-eta)',...
            '+0.25.*(1+eta)',...
            '-0.25.*(1+eta)',...
            '-0.25.*(1-eta)'},...
            'Gbases_2',{'-0.25.*(1+csi)',...
            '+0.25.*(1+csi)',...
            '+0.25.*(1-csi)',...
            '-0.25.*(1-csi)'});
        
end
